package org.example.chenniyrpcspingbootstarter.bootstrap;

import boot.RpcApplication;
import bootstrap.ProviderBootstrap;
import lombok.extern.slf4j.Slf4j;
import org.example.chenniyrpcspingbootstarter.annotation.EnableRpc;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import server.HttpServer;
import server.VertHttpServer;

/**
 * RPC框架全局初始化
 */
@Slf4j
public class RpcInitBootStrap implements ImportBeanDefinitionRegistrar {
    /**
     * 在 Spring 框架初始化时，获取 @EnableRpc 注解的属性，并初始化 RPC 框架可以实现 Spring 的 ImportBeanDefinitionRegistrar 接口，并且在 registerBeanDefinitions 方法中，获取到项目的注解和注解属性。
     * @param importingClassMetadata
     * @param registry
     */
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry){
        //1.Rpc框架初始化
        RpcApplication.init();
        //2.拿到Enable的needServer
        boolean needServer = (boolean) importingClassMetadata.getAnnotationAttributes(EnableRpc.class.getName()).get("needServer");
        if(needServer){
            //需要启动服务器（说明是服务提供者要走的）
            // 启动 web 服务
            HttpServer httpServer = new VertHttpServer();
            httpServer.doStart(RpcApplication.getRpcConfig().getServicePort());
        }else{
            log.info("消费者引入,无需启动服务器！");
        }
    }
}
